home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / gnugo1_1.lha / gnugo / suicide.c < prev   
C/C++ Source or Header  |  1989-03-07  |  2KB  |  84 lines

  1. /*
  2.                 GNU GO - the game of Go (Wei-Chi)
  3.                 Version 1.1   last revised 3-1-89
  4.            Copyright (C) Free Software Foundation, Inc.
  5.                       written by Man L. Li
  6.                       modified by Wayne Iba
  7.                     documented by Bob Webber
  8. */
  9. /*
  10. This program is free software; you can redistribute it and/or modify
  11. it under the terms of the GNU General Public License as published by
  12. the Free Software Foundation - version 1.
  13.  
  14. This program is distributed in the hope that it will be useful,
  15. but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. GNU General Public License in file COPYING for more details.
  18.  
  19. You should have received a copy of the GNU General Public License
  20. along with this program; if not, write to the Free Software
  21. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22.  
  23. Please report any bug/fix, modification, suggestion to
  24.  
  25. mail address:   Man L. Li
  26.                 Dept. of Computer Science
  27.                 University of Houston
  28.                 4800 Calhoun Road
  29.                 Houston, TX 77004
  30.  
  31. e-mail address: manli@cs.uh.edu         (Internet)
  32.                 coscgbn@uhvax1.bitnet   (BITNET)
  33.                 70070,404               (CompuServe)
  34. */
  35.  
  36. #include <stdio.h>
  37.  
  38. #define EMPTY 0
  39.  
  40. extern unsigned char p[19][19], l[19][19];
  41. extern int mymove, umove;
  42. extern int lib;
  43. extern int uik, ujk;  /* piece captured */
  44.  
  45. suicide(i, j)
  46. /* check for suicide move of opponent at p[i][j] */
  47. int i, j;
  48. {
  49.  int m, n, k;
  50.  
  51. /* check liberty of new move */
  52.  lib = 0;
  53.  countlib(i, j, umove);
  54.  if (lib == 0)
  55. /* new move is suicide then check if kill my pieces and Ko possibility */
  56.    {
  57. /* assume alive */
  58.     p[i][j] = umove;
  59.  
  60. /* check my pieces */
  61.     eval(mymove);
  62.     k = 0;
  63.  
  64.     for (m = 0; m < 19; m++)
  65.       for (n = 0; n < 19; n++)
  66. /* count pieces will be killed */
  67.     if ((p[m][n] == mymove) && !l[m][n]) ++k;
  68.  
  69.     if ((k == 0) || (k == 1 && ((i == uik) && (j == ujk))))
  70. /* either no effect on my pieces or an illegal Ko take back */
  71.       {
  72.        p[i][j] = EMPTY;   /* restore to open */
  73.        return 1;
  74.       }
  75.     else
  76. /* good move */
  77.       return 0;
  78.    }
  79.  else
  80. /* valid move */
  81.    return 0;
  82. }  /* end suicide */
  83.  
  84.